home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
C
/
GCC
/
V2-4-5
/
GCC1
/
!GCC
/
!Changes
< prev
next >
Wrap
Text File
|
1994-10-06
|
6KB
|
130 lines
Changes
=======
This describes the changes between the releases of GCC for the Archimedes.
2.4.5 (1.beta.1) -> 2.4.5 (R2)
==============================
This is mostly bug fixes with a few enhancements.
1) Confusion between binaries being in subdirs gcc and bin sorted out -
they are definitely in bin (i think).
2) GCC now handles leaf functions differently, and drops the APCS-R
prologue and epilogues, if it can. This means that GCC now runs at
around 16,500 Dhrystones compared to the previous 14,300, and
Norcroft's 18,500.
3) A problem with using variables the same as the APCS-R register names
(r0, fp etc.) has been cleared.
4) The switch -acorn-make is now deprecated, and has been replaced by
-mamu, which has the same effect of generating the dependencies file
for AMU. This was done as all machine specific switch should start
-m. -acorn-make is accepted by this release, but will not be
accepted by later versions.
5) For those who wish to use Stubs rather than UnixLib, a new switch
-mstubs has been added which does all that is required to use Stubs.
6) Attempts to use the -pipe command are rejected as errors.
7) the -mno-apcs switch has had its behaviour tidied up. [internal
effect only]
8) Profiling attempts to generate something reasonable.
2.4.5 (r2) -> 2.4.5 (R2.1)
==========================
Mainly fixes for a couple of minor bugs - If they dont bite, you dont need
this upgrade.
1) Problems with passing float parameters to some functions - the
generated code references an undefined register. This was reported
when using the iostream library and the << operator.
2) When using C++, the new_handler() functions required UnixLib to be
used rather than stubs as the used write() to report errors. I now
use OS_Write0 to disply the error message - this does mean that
redirection of stderr will not catch this error message.
3) GCC has an inbuilt alloca(), which is incompatabile with the APCS-R
multi-chunk stack. To use alloca correctly, you MUST include the
file <alloca.h> before calling alloca(). This is due to GCC simply
dropping the stack pointer without checking for any erorrs. UnixLib
uses malloc() and patches the return address in the stack to free
the memory on function return.
4) I have finally sorted out the problem of register names - AS now
contains these as internal constants, which do not clash with
variables of the same name.
The register names that GCC / AS recognises are :
r0 r1 r2 r3 r4 r5 r6 r7 r8 General purpose registers
rfp sl fp ip sp lr pc Used by GCC - take care when using these
f0 f1 f2 f3 f4 f5 f6 f7 Floating point registers.
Note - AS only recognises these when being used as a backend to GCC,
if using AS in standalone mode, you still have to define the
registers you use.
5) Internal labels are now preceded by a '.', which is illegal in C
variables, so there should be no clashes.
6) Changes to UnixLib have meant that 'riscos' does not have to be
undefined when compiling with UnixLib.
2.4.5 (R2.1) -> 2.4.5 (R2.2)
============================
Yet again, this is only a few bug fixes. My current intention is that this
will be the last relase of GCC 2.4.5, and the next release will be based on
GCC 2.6.x (probably 2.6.1), unless anyone reports any show stoper bugs.
1) The backend assembler has been improved to generate the correct
instructions for loading / storing floating point values, with
post-increment write back to the base register. This only caused
errors on the FPA, and not on the FPE. This correction is also in
!AS V1.26 and later.
2) the use of long long variables should work - most of the long long
library code was missing.
3) Confusion between different, incompatible versions of !AS being in
the run path has been corrected, GCC now uses gcc_as. This is
currently a standard V1.26b !AS, linked against the Shared C
library, though this may drift in the future. This has meant the the
binary is reduced in size.
4) The problem with GCC not correctly reading the return code from the
sub programs it invokes has been cured, and errors from one run do
not affect the next.
5) Calls to alloca() are correctly handled by GCC now, and it is not
required to include the file <alloca.h>, though it is recomended.
6) Includes of the form #include "Path:file.h" now work correctly, and
there is no need for the #include "Path:/file.h" form.
7) Problems with an 'extern int' statement being followed immediately
by a 'const int' statement casuing !AS to complain about attempting
to put data into a non-init area has been cleared - I forgot to
change back to the code area after outputing a 'common' area.
8) At the request of the ARchBSD mob, GCC should now handle filenames
with upto 55 characters in each path element.
9) gcc now complain if it thinks it does not have enough memory to run.
The minimum wimpslot that will allow GCC to run is now 3044K. If the
slot is smaller, GCC stops with a fatal error.